From 3f3506ccfa3cb9e69e0d209dcf04f18603e31e47 Mon Sep 17 00:00:00 2001 From: Daniel Colascione Date: Sat, 15 Feb 2014 21:43:44 -0800 Subject: [PATCH] Make closing dbus buses actually work --- src/ChangeLog | 8 ++++++++ src/dbusbind.c | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index fc044e26561..6c32da65ff6 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2014-02-16 Daniel Colascione + + * dbusbind.c (xd_lisp_dbus_to_dbus): New function. + (xd_get_connection_address): Use it. + (xd_close_bus): Use xd_lisp_dbus_to_dbus to instead of + xd_get_connection_address because the latter signals if the bus + we're trying to close is already disconnected. + 2014-02-13 Eli Zaretskii * w32proc.c (start_timer_thread): Pass a non-NULL pointer as last diff --git a/src/dbusbind.c b/src/dbusbind.c index 5680eacd9b2..f6df5107db1 100644 --- a/src/dbusbind.c +++ b/src/dbusbind.c @@ -973,6 +973,13 @@ xd_get_connection_references (DBusConnection *connection) return *refcount; } +/* Convert a Lisp dbus object to a pointer */ +static DBusConnection* +xd_lisp_dbus_to_dbus (Lisp_Object bus) +{ + return (DBusConnection *) (intptr_t) XFASTINT (bus); +} + /* Return D-Bus connection address. BUS is either a Lisp symbol, :system or :session, or a string denoting the bus address. */ static DBusConnection * @@ -985,7 +992,7 @@ xd_get_connection_address (Lisp_Object bus) if (NILP (val)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); else - connection = (DBusConnection *) (intptr_t) XFASTINT (val); + connection = xd_lisp_dbus_to_dbus (val); if (!dbus_connection_get_is_connected (connection)) XD_SIGNAL2 (build_string ("No connection to bus"), bus); @@ -1080,14 +1087,21 @@ xd_close_bus (Lisp_Object bus) { DBusConnection *connection; Lisp_Object val; + Lisp_Object busobj; /* Check whether we are connected. */ val = Fassoc (bus, xd_registered_buses); if (NILP (val)) return; + busobj = CDR_SAFE(val); + if (NILP (val)) { + xd_registered_buses = Fdelete (val, xd_registered_buses); + return; + } + /* Retrieve bus address. */ - connection = xd_get_connection_address (bus); + connection = xd_lisp_dbus_to_dbus (busobj); if (xd_get_connection_references (connection) == 1) { -- 2.30.2